﻿namespace Blaze.Editor.EditorExtensions
{
    /// <summary>
    /// 编辑器扩展抽象基类。
    /// </summary>
    public abstract class ExtensionComponent
    {
        /// <summary>
        /// 获取一个值，表示组件是否启用。
        /// </summary>
        public bool IsEnabled
        {
            get
            {
                if (mIsEnabled == null)
                    mIsEnabled = ProjectEditorPrefs.GetBool(GetEnabledKey(), IsDefaultEnabled);
                return mIsEnabled.Value;
            }
            set
            {
                if (IsEnabled != value)
                    ProjectEditorPrefs.SetBool(GetEnabledKey(), value);
                mIsEnabled = value;
            }
        }

        /// <summary>
        /// 获取一个值，表示组件是否默认启用。
        /// </summary>
        protected virtual bool IsDefaultEnabled
        {
            get { return true; }
        }

        /// <summary>
        /// 初始化组件。
        /// </summary>
        public void Initialize()
        {
            if (mIsInitialized)
                return;

            OnInitialize();
            mIsInitialized = true;
        }

        /// <summary>
        /// 获取组件是否启用的键。
        /// </summary>
        protected abstract string GetEnabledKey();

        /// <summary>
        /// 当需要初始化组件时调用此方法。
        /// </summary>
        protected virtual void OnInitialize()
        {
        }

        private bool? mIsEnabled;
        private bool mIsInitialized;
    }
}